home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 002 / ticket.arc / TICKET.PAS < prev   
Pascal/Delphi Source File  |  1986-08-05  |  22KB  |  652 lines

  1. program labels;   {Produce similar labels differing only by a number}
  2. const
  3.    hmin = 20;
  4.    hmax = 77;
  5.    vmin = 3;
  6.    vmax = 20;
  7.    tl   = '┌';
  8.    tr   = '┐';
  9.    bl   = '└';
  10.    br   = '┘';
  11.    vl   = '│';
  12.    hl   = '─';
  13.    nchar= '@';
  14.    outdev= 'LST:';
  15.    tab   = 4;
  16.    bksp  = ^H;
  17.    ret   = ^M;
  18.    tabc  = ^I;
  19.  
  20. { The following is a partial listing of ScanCodes for the IBM PC using KBDIO
  21.   for TURBO PASCAL:
  22. Key     ScanCode }                                                               
  23. f1       =15104;
  24. f2       =15360;
  25. f3       =15616;
  26. f4       =15872;
  27. f5       =16128;
  28. f6       =16384;
  29. f7       =16640;
  30. f8       =16896;
  31. f9       =17408;
  32. f10      =17408;
  33.  
  34. altf1    =26624;
  35. altf2    =26880;
  36. altf3    =27136;
  37. altf4    =27392;
  38. altf5    =27648;
  39. altf6    =27904;
  40. altf7    =28160;
  41. altf8    =28416;
  42. altf9    =28672;
  43. altf10   =28928;
  44.  
  45. shftf1   =21504;
  46. shftf2   =21760;
  47. shftf3   =22016;
  48. shftf4   =22272;
  49. shftf5   =22528;
  50. shftf6   =22784;
  51. shftf7   =23040;
  52. shftf8   =23296;
  53. shftf9   =23552;
  54. shftf10  =23808;
  55.  
  56. ctrlf1   =24064;
  57. ctrlf2   =24320;
  58. ctrlf3   =24576;
  59. ctrlf4   =24832;
  60. ctrlf5   =25088;
  61. ctrlf6   =25344;
  62. ctrlf7   =25600;
  63. ctrlf8   =25856;
  64. ctrlf9   =26112;
  65. ctrlf10  =26368;
  66.  
  67. Home     =18176;
  68. Up       =18432;
  69. PgUp     =18688;
  70. Left     =19200;
  71. Right    =19712;
  72. Endx     =20224;
  73. Down     =20480;
  74. PgDn     =20736;
  75. Ins      =20992;
  76. Del      =21248;
  77.  
  78. CtrlHome =30464;
  79. CtrlPgUp =-31744; {negative}
  80. CtrlLft  =29440;
  81. CtrlRgt  =29696;
  82. CtrlEnd  =29952;
  83. CtrlPgDn =30208;
  84.  
  85. ShftHome =18231;
  86. ShftUp   =18488;
  87. ShftPgUp =18745;
  88. ShftLft  =19252;
  89. ShftRgt  =19766;
  90. ShftEnd  =20273;
  91. ShftDn   =20530;
  92. ShftPgDn =20787;
  93. ShftIns  =21040;
  94. ShftDel  =21294;
  95.  
  96. gminus   =18989;  {on the numeric pad}
  97. gplus    =20011; {"   "     "     "}
  98.  
  99. var
  100.    labl:                       array [1..80,1..20] of char; {One label}
  101.    line:                       string[80];                  {One line}
  102.    h,v:                        integer;                     {Hor, ver size}
  103.    i,j,k,l,m,n,x,y:            integer;
  104.    lfile,pfile:                text;
  105.    lfilen,dfilen,nfilen:       string[14];
  106.    choice,c:                   char;
  107.    nacross,ndown,pnum,pagelen: integer;
  108.    lownum,hinum:               real;
  109.    ok,insx:                    boolean;
  110.    single:                     boolean;
  111.    margin:                     integer;
  112.  
  113. function max(i1,i2:integer): integer;
  114. begin
  115.    if i1>i2 then max := i1 else max := i2;
  116. end;
  117.  
  118. function min(i1,i2:integer): integer;
  119. begin
  120.    if i1<i2 then min := i1 else min := i2;
  121. end;
  122.  
  123. procedure getscancode(var scancode: integer);
  124. type
  125.    regpack = record
  126.       ax,bx,cx,dx,bp,si,ds,es,flags: integer;
  127.    end;
  128. var
  129.    recpack: regpack;
  130.    ah,al:   byte;
  131.  
  132. begin
  133.    with recpack do
  134.       ax := $0000;
  135.    intr($16,recpack);
  136. {
  137. gotoxy(1,1);write(recpack.ax);gotoxy(x,y);
  138. }
  139.    scancode := recpack.ax;
  140. end;
  141.  
  142. procedure getc(var c:char);
  143. var
  144.    i: integer;
  145. begin
  146.    getscancode(i);
  147.    if lo(i)<>0 then c := chr(lo(i)) else begin write(chr(8)); c := ' ' end;
  148. end;
  149.  
  150. procedure credits;
  151. begin
  152.    clrscr;
  153.    normvideo;
  154.    write(tl);for i := 1 to 77 do write(hl); write(tr);
  155.    for i := 2 to 20 do begin
  156.       gotoxy(1,i); write(vl);
  157.       gotoxy(79,i); write(vl);
  158.    end;
  159.    gotoxy(1,21); write(bl); for i := 1 to 77 do write(hl); write(br);
  160.    gotoxy(3,3);
  161.    lowvideo;
  162.    write('TICKET - A program to produce numbered tickets or labels of any size.');
  163.    gotoxy(3,5);
  164.    write('This program will produce virtually any type of numbered ticket or label.');
  165.    gotoxy(3,6);
  166.    write('You can use the screen editor to make a ticket that looks the way you want.');
  167.    gotoxy(3,7);
  168.    write('With the print menu you can choose any number across and down on a page.');
  169.    gotoxy(3,8);
  170.    write('The label files are simple ascii files.  Any file not greater than 20');
  171.    gotoxy(3,9);
  172.    write('lines by 78 characters may be used.');
  173.    gotoxy(3,11);
  174.    write('This program is provided by RAXCO SOFTWARE LTD., 18 COWDY ST., KINGSTON,');
  175.    gotoxy(3,12);
  176.    write('ONTARIO, K7K 3V7.                          Mike Draper (613)-549-7502');
  177.    gotoxy(3,15);
  178.    write('See the bottom of the edit screen for key assignments.  The sequential');
  179.    gotoxy(3,16);
  180.    write('numbers are represented by @ signs, one for each digit up to six.  The');
  181.    gotoxy(3,17);
  182.    write('same number may appear up to 8 times on a ticket.  One line is inserted');
  183.    gotoxy(3,18);
  184.    write('between tickets and form feeds are not used.');
  185.    gotoxy(3,25);
  186.    write('Press any key to continue...');
  187.    getc(c);
  188. end;
  189.  
  190. procedure heading;
  191. begin
  192.    clrscr;
  193.    normvideo;
  194.    write(tl);
  195.    for i := 1 to 77 do write(hl);
  196.    writeln(tr);
  197.    write(vl);
  198.    normvideo;
  199.    write('                   Labels and Tickets with Serial Numbers ');
  200.    gotoxy(79,2);writeln(vl);
  201.    write(bl);
  202.    for i := 1 to 77 do write(hl);
  203.    writeln(br);
  204.    lowvideo;
  205. end;
  206.  
  207. procedure getfile;
  208. begin
  209.    heading;
  210.    gotoxy(10,5);write('Enter file name of label');
  211.    gotoxy(50,5);write(dfilen);
  212.    gotoxy(65,5);readln(lfilen);
  213.    if length(lfilen)=0 then lfilen := dfilen;
  214.    if length(lfilen)>0 then begin
  215.       if pos('.',lfilen)=0 then lfilen := concat(lfilen,'.LBL');
  216.       assign(lfile,lfilen);
  217.       {$i- set io check off}
  218.       reset(lfile);
  219.       {$i+ set io check back on}
  220.       ok := ioresult=0;
  221.       if not ok then begin
  222.          h := 0; v := 0;
  223.          while (h<hmin) or (h>hmax) do begin
  224.             h := 30;
  225.             gotoxy(1 ,7);write('Enter number of characters across (20-77)');
  226.             gotoxy(60,7);write(h:2);
  227.             gotoxy(65,7);readln(h);
  228.          end;
  229.          while (v<vmin) or (v>vmax) do begin
  230.             v := 5;
  231.             gotoxy(1 ,9);write ('Enter number of lines down  (3-16):');
  232.             gotoxy(60,9);write(v:2);
  233.             gotoxy(65,9);readln(v);
  234.          end;
  235.          for i := 1 to h do
  236.             for j := 1 to v do
  237.                labl[i,j] := ' ';
  238.       end else begin
  239.          v := 0;
  240.          h := 0;
  241.          while not eof(lfile) do begin
  242.             line := '';
  243.             readln(lfile,line);
  244.             v := v+1;
  245.             for i := 1 to length(line) do
  246.                labl[i,v] := line[i];
  247.             h := max(h,length(line));
  248.          end;
  249.          close(lfile);
  250.       end;
  251.    end;
  252.    dfilen := lfilen;
  253. end;
  254.  
  255. procedure putfile;
  256. begin
  257.    gotoxy(10,23);
  258.    write('Enter filename for saved label. <return> for same :');
  259.    readln(nfilen);
  260.    if length(nfilen)=0 then nfilen := lfilen;
  261.    if pos('.',nfilen)=0 then nfilen := concat(nfilen,'.LBL');
  262.    assign(lfile,nfilen);
  263.    rewrite(lfile);
  264.    for i := 1 to v do begin
  265.       for j := 1 to h do  write(lfile,labl[j,i]);
  266.       writeln(lfile);
  267.    end;
  268.    close(lfile);
  269. end;
  270.  
  271. procedure gettl;
  272. begin
  273.    x := (80-h) div 2;
  274.    y := (26-v) div 2;
  275. end;
  276.  
  277. procedure displabl;
  278. begin
  279.    gettl;
  280.    gotoxy(x,y);
  281.    write(tl);
  282.    for i := x+1 to x+h do write(hl);
  283.    write(tr);
  284.    y := y+1;
  285.    gotoxy(x,y);
  286.    for i := 1 to v do begin
  287.       gotoxy(x,y);
  288.       write(vl);
  289.       for j := 1 to h do write(labl[j,i]);
  290.       write(vl);
  291.       y := y+1;
  292.    end;
  293.    gotoxy(x,y);
  294.    write(bl);
  295.    for i := x+1 to x+h do write(hl);
  296.    write(br);
  297. end;
  298.  
  299. procedure editlabl;
  300. var
  301.    xmax,ymax,xmin,ymin,xoff,yoff,oldx,oldy,xo,yo: integer;
  302.    code: integer;
  303.    hicode,locode: char;
  304.  
  305.    procedure resetdis;
  306.    begin
  307.       oldx := x; oldy := y;
  308.       displabl;
  309.       gettl;
  310.       x := x+1; y := y+1; xoff := x-1; yoff := y-1;
  311.       xmin :=x;  ymin := y;  xmax := x+h-1; ymax := y+v-1;
  312.       gotoxy(2,2);write('H=',h:2,' V=',v:2);
  313.       x := max(oldx,xmin) ; y := max(oldy,ymin);
  314.       x := min(x,xmax)    ; y := min(y,ymax);
  315.    end;
  316.  
  317. begin
  318.    resetdis;
  319.    x := xmin; y := ymin;
  320.    gotoxy(1,24);
  321.    write('Ins toggle| Del Char | Home Begin Ln| End line | F1 Long | F3 Wider | Gray -');
  322.    gotoxy(1,25);
  323.    write('SIns Line | SDel Line| Gray + Centre| SEnd Done| F2 Short| F4 Narrow| Cntr All');
  324.    gotoxy(60,2);
  325.    if insx then write('INSERT   ') else write('OVERWRITE');
  326.  
  327.    repeat
  328.       gotoxy(x,y);
  329.       getscancode(code);
  330.       hicode := chr(hi(code));
  331.       locode := chr(lo(code));
  332.       case code of
  333.          down        : if y<ymax then y := y+1;
  334.          up          : if y>ymin then y := y-1;
  335.          left        : if x>xmin then x := x-1;
  336.          right       : if x<xmax then x := x+1;
  337.          home,shftlft: x := xmin;                          {Begin of line}
  338.          Shfthome    : begin x := xmin; y := ymin end;     {Top left}
  339.          endx,Shftrgt: x := xmax;                          {End of line}
  340.          Shftend     :;                                    {End of edit}
  341.          pgup,shftup : y := ymin;                          {Top line}
  342.          pgdn,shftdn : y := ymax;                          {Bottom line}
  343.          f1          : if v<vmax then begin                {Make longer}
  344.                           v := v+1;
  345.                           for i := 1 to h do labl[i,v] := ' ';
  346.                           resetdis;
  347.                        end;
  348.          f2          : if v>vmin then begin                 {Make shorter}
  349.                           v := v-1;
  350.                           for i := xmin-1 to xmax+1 do begin
  351.                              gotoxy(i,ymin-1);write(' ');
  352.                              gotoxy(i,ymax+1);write(' ');
  353.                           end;
  354.                           resetdis;
  355.                        end;
  356.          f3          : if h<hmax then begin                 {Make wider}
  357.                           h := h+1;
  358.                           for i := 1 to v do labl[h,i] := ' ';
  359.                           resetdis;
  360.                        end;
  361.          f4          : if h>hmin then begin                  {Make narrower}
  362.                           h := h-1;
  363.                           for j := ymin-1 to ymax+1 do begin
  364.                              gotoxy(xmin-1,j);write(' ');
  365.                              gotoxy(xmax+1,j);write(' ');
  366.                           end;
  367.                           resetdis;
  368.                        end;
  369.          shftins      :   begin                                {Insert a line}
  370.                              for i := ymax-1 downto y do
  371.                                 for j := xmin to xmax do begin
  372.                                    labl[j-xoff,(i+1)-yoff] := labl[j-xoff,i-yoff];
  373.                                    if i = y then begin
  374.                                       labl[j-xoff,i-yoff] := ' ';
  375.                                    end;
  376.                                 end;
  377.                               resetdis;
  378.                           end;
  379.          shftdel      : for i := y to ymax do                {Delete a line}
  380.                            for j := xmin to xmax do begin
  381.                               if i<ymax then
  382.                                  labl[j-xoff,i-yoff] := labl[j-xoff,(i+1)-yoff]
  383.                               else
  384.                                  labl[j-xoff,i-yoff] := ' ';
  385.                               gotoxy(j,i);
  386.                               if i<ymax then
  387.                                  write(labl[j-xoff,i-yoff])
  388.                               else
  389.                                  write(' ');
  390.                            end;
  391.  
  392.          del         : begin                                 {Delete a char}
  393.                           for i := x-xoff to (xmax-xoff)-1 do begin
  394.                              labl[i,y-yoff] := labl[i+1,y-yoff];
  395.                              gotoxy(i+xoff,y); write(labl[i+1,y-yoff]);
  396.                           end;
  397.                        end;
  398.          ins         : begin                                {Toggle Insert}
  399.                           insx := not insx;
  400.                           gotoxy(60,2);
  401.                           if insx then write('INSERT   ')
  402.                              else write('OVERWRITE');
  403.                        end;
  404.          gminus      : begin                                 {Centre all text}
  405.                          for n := ymin to ymax do begin
  406.                           i := 0;
  407.                           while (labl[i+xmin-xoff,n-yoff]=' ') and (i<=h) do
  408.                              i := i+1;
  409.                           j := 0;
  410.                           while (labl[xmax-xoff-j,n-yoff]=' ') and (j<=h) do
  411.                              j := j+1;
  412.                           if (i+j>1) and (i<>j) then begin
  413.                              while (i-j)>1 do begin
  414.                                 for k := 2 to h do
  415.                                    labl[k-1,n-yoff] := labl[k,n-yoff];
  416.                                 labl[h,n-yoff] := ' ';
  417.                                 i := i-1; j := j+1;
  418.                              end;
  419.                              while (j-i)>0 do begin
  420.                                 for k := h-1 downto 1 do
  421.                                    labl[k+1,n-yoff] := labl[k,n-yoff];
  422.                                 labl[1,n-yoff] := ' ';
  423.                                 i := i+1; j := j-1;
  424.                              end;
  425.                           end;
  426.                         end;
  427.                         resetdis;
  428.                        end;
  429.          gplus       : begin                                 {Centre text}
  430.                           i := 0;
  431.                           while (labl[i+xmin-xoff,y-yoff]=' ') and (i<=h) do
  432.                              i := i+1;
  433.                           j := 0;
  434.                           while (labl[xmax-xoff-j,y-yoff]=' ') and (j<=h) do
  435.                              j := j+1;
  436.                           if (i+j>1) and (i<>j) then begin
  437.                              while (i-j)>1 do begin
  438.                                 for k := 2 to h do
  439.                                    labl[k-1,y-yoff] := labl[k,y-yoff];
  440.                                 labl[h,y-yoff] := ' ';
  441.                                 i := i-1; j := j+1;
  442.                              end;
  443.                              while (j-i)>0 do begin
  444.                                 for k := h-1 downto 1 do
  445.                                    labl[k+1,y-yoff] := labl[k,y-yoff];
  446.                                 labl[1,y-yoff] := ' ';
  447.                                 i := i+1; j := j-1;
  448.                              end;
  449.                           end;
  450.                           resetdis;
  451.                        end
  452.      else begin
  453.         case locode of
  454.            ret     : if y<ymax then begin y:=y+1;x:=xmin;end;
  455.            bksp,^H : if x>xmin then begin
  456.                         x := x-1;
  457.                         for i := x-xoff to (xmax-xoff)-1 do begin
  458.                            labl[i,y-yoff] := labl[i+1,y-yoff];
  459.                            gotoxy(i+xoff,y); write(labl[i+1,y-yoff]);
  460.                         end;
  461.                      end;
  462.            tabc    : if x+tab<=xmax then x := x+tab;
  463.            ' '..'~': begin
  464.                         if insx then begin
  465.                            for i := xmax downto x+1 do begin
  466.                               labl[i-xoff,y-yoff] := labl[(i-1)-xoff,y-yoff];
  467.                               gotoxy(i,y); write(labl[i-xoff,y-yoff]);
  468.                            end;
  469.                         end;
  470.                         gotoxy(x,y);write(locode);
  471.                         labl[x-xoff,y-yoff] := locode;
  472.                         if x<xmax then x := x+1
  473.                      end;
  474.            end;                           {else begin}
  475.         end                           {case}
  476.      end                           {Process char}
  477.   until code=shftend;          {main loop}
  478. end;                        {Procedure}
  479.  
  480. procedure getoptions;
  481. begin
  482.    gotoxy(20,7 );write('Characters across ',h:2,'  Lines down ',v:2);
  483.    gotoxy(20,9 );write('Low number for numbering');
  484.    gotoxy(50,9 );write(lownum:6:0);
  485.    gotoxy(60,9 );readln(lownum);
  486.    gotoxy(20,11);write('High number to print');
  487.    gotoxy(50,11);write(hinum:6:0);
  488.    gotoxy(60,11);readln(hinum);
  489.    gotoxy(20,13);write('Number of lines on a page');
  490.    gotoxy(50,13);write(pagelen:6);
  491.    gotoxy(60,13);readln(pagelen);
  492.    gotoxy(20,15);write('Number printed across');
  493.    gotoxy(50,15);write(nacross:6);
  494.    gotoxy(60,15);readln(nacross);
  495.    ndown := pagelen div (v+1);
  496.    gotoxy(20,17);write('Number of labels down per page');
  497.    gotoxy(50,17);write(ndown:6);
  498.    gotoxy(60,17);readln(ndown);
  499.    gotoxy(20,19);write('Margin on left characters');
  500.    gotoxy(50,19);write(margin:6);
  501.    gotoxy(60,19);readln(margin);
  502.    gotoxy(20,21);write('Stop after each page?');
  503.    c := ' ';
  504.    while not (c in ['Y','y','T','t','N','n','F','f']) do begin
  505.       gotoxy(60,21);
  506.       getc(c);write(upcase(c));
  507.    end;
  508.    if c in ['T','t','Y','y'] then single := true else single := false;
  509.    gotoxy(20,23);write('OK to continue with printing?');
  510.    c := ' ';
  511.    while not (c in ['Y','y','T','t','N','n','F','f']) do begin
  512.       gotoxy(60,23);
  513.       getc(c);write(upcase(c));
  514.    end;
  515.    if c in ['T','t','Y','y'] then ok := true else ok := false;
  516. end;
  517.  
  518. procedure printlabel;
  519. var
  520.    cnt:    integer;
  521.    num:    real;
  522.    numpg:  integer;
  523.    ii,jj:  integer;
  524.    mm:     integer;
  525.    nposadj:integer;
  526.    npos:   array[1..8] of integer;
  527.    nlen:   array[1..8] of integer;
  528.    snum:   string[hmax];
  529.    line1:  string[hmax];
  530.    npage:  integer;
  531.  
  532.    procedure getnumbers;                      {Insert serial numbers}
  533.    begin
  534.       ii := 0; nposadj := 0;
  535.       for jj := 1 to 8 do begin npos[jj] := 0; nlen[jj] := 0; end;
  536.       while pos(nchar,line)>0 do begin
  537.          ii := ii+1;
  538.          npos[ii] := pos(nchar,line);                   {Locate number}
  539.          nlen[ii] := 0;
  540.          m := npos[ii];
  541.          while (npos[ii]>0) and (line[m]=nchar) do begin
  542.             nlen[ii] := nlen[ii]+1;
  543.             m := m+1;
  544.          end;
  545.          delete(line,npos[ii],nlen[ii]);
  546.          npos[ii] := npos[ii]+nposadj;                  {Adjust for prev}
  547.          nposadj := nposadj+nlen[ii];
  548.       end;
  549.     end;
  550.  
  551. begin
  552.    assign(pfile,outdev);
  553.    rewrite(pfile);
  554.    num := lownum;
  555.    numpg := trunc((hinum-lownum)/(nacross*ndown)+0.999);
  556.    cnt := 0;
  557.    if trunc(hinum-lownum+1)<ndown then ndown := trunc(hinum-lownum+1);
  558.  
  559.    npage := 1;
  560.    while npage <= numpg do begin                     {Each page}
  561.       for j := 1 to ndown do begin                      {Each Label}
  562.          for k := 1 to v do begin                          {Each line}
  563.             for l := 1 to h do line[l] := labl[l,k];          {Move to LINE}
  564.             line[0] := chr(h);
  565.             getnumbers;
  566.             line1 := line;
  567.  
  568.             for n := 1 to nacross do begin                     {Labels lines}
  569.                line := line1;
  570.                if num+n-1 <= hinum then begin                     {Ins nums}
  571.                   for jj := 1 to ii do begin
  572.                      if nlen[jj]>0 then begin
  573.                         str(num+n-1:nlen[jj]:0,snum);
  574.                         insert(snum,line,npos[jj]);
  575.                      end;
  576.                   end;
  577.                   if margin>0 then for mm := 1 to margin do write(pfile,' ');
  578.                   write(pfile,line);                 {Write line}
  579.                   gotoxy(65,25);write('P',npage:2,' N',num+n-1:6:0,' L',k:2);
  580.  
  581.                   if (n<nacross) then write(pfile,':');
  582.                   if num+n-1=hinum then begin               {Short line}
  583.                      writeln(pfile);
  584.                      cnt := cnt+1;
  585.                   end;
  586.                end;
  587.             end;
  588.             if (num+nacross)<=hinum then begin writeln(pfile); cnt := cnt+1; end;
  589.          end;   {Line of labels across}
  590.  
  591.          if (k=v) and (j<ndown) and (num<hinum) then begin     {skip to bottom}
  592.             if margin>0 then for mm := 1 to margin do write(pfile,' ');
  593.             for n := 1 to nacross*(h+1)-1 do write(pfile,'.');
  594.             writeln(pfile); cnt := cnt+1;
  595.          end;
  596.          num := num+nacross;
  597.       end;      {Row of labels across}
  598.  
  599.       for n := cnt+1 to pagelen do writeln(pfile);
  600.       cnt := 0;
  601.  
  602.       if single then begin
  603.          gotoxy( 1,25); write('Insert new page - Anything except Q to continue');
  604.          gotoxy(60,25); getc(c); write(upcase(c));
  605.          gotoxy( 1,25); write('                                                     ');
  606.          if upcase(c)='Q' then npage := 999;
  607.       end;
  608.       npage := npage+1;
  609.    end;         {Page of labels}
  610. end;         {Printlabl}
  611.  
  612. begin
  613.    single := false;
  614.    insx := false;
  615.    dfilen := 'LABEL.LBL';
  616.    lownum := 1.0;
  617.    hinum := 10.0;
  618.    nacross := 1;
  619.    pagelen := 66;
  620.    ndown :=0;
  621.    margin := 0;
  622.    choice := 'X';
  623.    credits;
  624.    while upcase(choice)<>'Q' do begin
  625.       heading;      {Print heading}
  626.       gotoxy(25,5 );write('E dit label');
  627.       gotoxy(25,7 );write('P rint labels');
  628.       gotoxy(25,9 );write('Q uit program');
  629.       gotoxy(25,15);write('Enter choice :');
  630.       x := 40; y := 15; gotoxy(x,y);
  631.       choice := ' ';
  632.       while not (choice in ['E','P','Q','e','p','q']) do getc(choice);
  633.       write(upcase(c));
  634.  
  635.       case upcase(choice) of
  636.  
  637.          'E': begin
  638.                  getfile;                 {Read old label or set up new file}
  639.                  heading;                 {Print heading}
  640.                  editlabl;                {Edit label}
  641.                  putfile;                 {Write out file}
  642.               end;
  643.          'P': begin
  644.                  getfile;                 {Read old label file or new one}
  645.                  getoptions;              {Get printing options}
  646.                  if ok then printlabel;   {Print labels}
  647.               end;
  648.          'Q': ;
  649.       end;    {case}
  650.    end;    {while}
  651. end.    {Program}
  652.